﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DatabaseRW;

namespace ModelConfigurator
{
    public partial class FormСonnectionDB : Form
    {
        public FormСonnectionDB()
        {
            InitializeComponent();
            toolTipAdd.SetToolTip(butAddDB, "Добавить новую БД");
            toolTipDel.SetToolTip(butDelDB, "Удалить БД");
        }

        public DBRW db_library = new DBRW();
        
        /// <summary>
        /// При загрузке формы получает список доступных серверов
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FormСonnectionDB_Load(object sender, EventArgs e)
        {
            List<string> Servers = db_library.GetServersList();//получение списка серверов
            foreach (string s in Servers)
            {
                cmbBoxServers.Items.Add(s);
            }
            cmbBoxServers.SelectedIndex = 0;
            if(cmbBoxDB.Items.Count > 0)
                cmbBoxDB.SelectedIndex = 0;
        }
        /// <summary>
        /// Получение списка БД конкретного сервера
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cmbBoxServers_SelectedIndexChanged(object sender, EventArgs e)
        {
            UpdateDBList();
        }

        public string server = "", database = "";

        /// <summary>
        /// Подключение к БД конкретного сервера
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonConnect_Click(object sender, EventArgs e)
        {
            if (!db_library.ConnectToDB(cmbBoxServers.Text, cmbBoxDB.Text) || cmbBoxDB.Text == "")
            {
                Error("Не удалось подключиться к БД");
            }
            else
            {
                if (db_library.CheckConnet())
                {
                    server = cmbBoxServers.Text;
                    database = cmbBoxDB.Text;
                    MessageBox.Show("Подключение к БД прошло успешно!", "Сообщение", MessageBoxButtons.OK);
                    this.Close();
                    //UpdateDBForm g = new UpdateDBForm(db_library, cmbBoxServers.Text, cmbBoxDB.Text);
                    //g.ShowDialog();
                }
                else
                    Error("Данная БД не соответствует стандарту");
            }
        }

        /// <summary>
        /// Получение (обновление) списка баз данных
        /// </summary>
        void UpdateDBList()
        {
            cmbBoxDB.Items.Clear();
            //получение списка БД:
            List<string> lst = db_library.GetDbList(cmbBoxServers.Text);
            if (lst != null)
            {
                foreach (string s in lst)
                {
                    cmbBoxDB.Items.Add(s);
                }
                cmbBoxDB.SelectedIndex = 0;
            }
        }

        /// <summary>
        /// Добавление БД
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void butAddDB_Click(object sender, EventArgs e)
        {
            try
            {
                if (db_library.CreationDataBase(cmbBoxServers.Text, cmbBoxDB.Text))
                {
                    cmbBoxDB.Text = "";
                    UpdateDBList();
                }
                else
                    Error("Не удалось добавить БД");
            }
            catch (Exception)
            {
                Error("Не удалось добавить БД");
            }
        }

        /// <summary>
        /// Ошибка
        /// </summary>
        /// <param name="message">Сообщение об ошибке</param>
        void Error(string message)
        {
            MessageBox.Show(message, "Ошибка", MessageBoxButtons.OK);
        }

        /// <summary>
        /// Удаление БД
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void butDelDB_Click(object sender, EventArgs e)
        {
            try
            {
                if (db_library.DeleteDataBase(cmbBoxServers.Text, cmbBoxDB.Text))
                {
                    cmbBoxDB.Text = "";
                    UpdateDBList();
                }
                else
                    Error("Не удалось удалить БД");
            }
            catch (Exception)
            {
                Error("Не удалось удалить БД");
            }
        }
    }
}
